home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / russell / russell.lha / examples / psexpr.r < prev    next >
Text File  |  1989-12-29  |  921b  |  27 lines

  1. (* Binary trees parametrized with respect to type of data stored in leaves *)
  2. (* Other variants are in sexpr.r, tree.r                                   *)
  3. func[atype : type {}] {
  4.      union U { atom : val atype;
  5.                cn: val prod { hd: val U; tl : val U };
  6.                empty_list: val Void }
  7.      with SE {
  8.         car == func[x: val SE] val SE {
  9.                   hd[to_cn[x]]
  10.                };
  11.         cdr == func[x: val SE] val SE {
  12.                   tl[to_cn[x]]
  13.                };
  14.         cons == func[x,y: val SE] val SE {
  15.                   SE$from_cn[
  16.                     prod { hd: val SE; tl: val SE } $ Mk [x, y]
  17.                   ]
  18.                };
  19.         In == SE$from_atom;
  20.         Out == SE$to_atom;
  21.         atom == SE$is_atom;
  22.         null == SE$is_empty_list;
  23.         nil == func[] { SE$from_empty_list[Null] }  }
  24.         export { New; := ; V; car; cdr; cons; In; Out; atom; null; nil }
  25. }
  26.  
  27.